import * as  $http from "@/utlis/interface/updateApp"
import { androidURL, ios_URL, Silent_URL } from './pulice'
import { Modal, Toast } from './uni_api'

/**
 * @APP热更新
 * @步骤一 ： 比对服务端版本与APP版本是否匹配， 是 无需更新   否 需要更新
 * @步骤二 ： 更新分为两种 强制更新(有SDK或原生组件)  静默更新
 * @步骤三 ： 下载包更新
 * @注意   :  注意条件编译  应为它是运行在APP中的 小程序及 H5 等平台是没有 HTML5+ 扩展规范的
 *            否则运行到h5、小程序等平台会出现 plus is not defined 错误
 */
// #ifdef APP-PLUS
//检测APP版本是否需要更新
let Proxy: any = ''
const APP_UPdata = (proxy: any) => {
    return new Promise((resolve, reject) => {
        Proxy = proxy
        const system = uni.getSystemInfoSync()
        // true 强制更新  false  静态更新     reject 退出应用
        Version_Pk().then(judgment => {
            // console.log(judgment, 'judgment')
            if (judgment) {
                // 强制更新
                // resolve(false)
                // Forced_Updating(system.osName)
                // 静默更新
                resolve(true)
                Silent_Updating()
            } else {
                resolve(true)
                // // 静默更新
                // Silent_Updating()
            }
        }).catch(err => {
            resolve(false)
            App_exit(system.osName)
        })
    })

}

let RequestAppconfig: any = ''

// 版本对比
const Version_Pk = () => {
    return new Promise((resolve, reject: any) => {
        const Appid = plus.runtime.appid
        // 获取指定Appid的应用信息
        plus.runtime.getProperty((<string>Appid), (wgtinfo) => {
            uni.setStorageSync('widgetInfo',wgtinfo.version)
            // console.log(wgtinfo, '应用信息')
            // 请求服务端的版本信息
            $http.updateApp('dict_rider_app_download', Proxy).then((res: any) => {
                RequestAppconfig = res.data.itemMap.dict_rider_app_download
                // 版本对比
                let UP_Show: boolean = false
                let requestVerARR: any = RequestAppconfig.max_version.split('.')
                let wgtinfoVerARR: any = wgtinfo.version?.split('.')
				let flag = true
                requestVerARR.forEach((item: string, index: number) => {
                    if (flag && Number(requestVerARR[index]) > Number(wgtinfoVerARR[index])) {
                        UP_Show = true
						flag = false
                    }else if (flag && Number(requestVerARR[index]) < Number(wgtinfoVerARR[index])) {
						flag = false
					}
                });
                //console.log(wgtinfoVerARR);
                //console.log(requestVerARR);
                console.log('是否需要更新', UP_Show)
                if (UP_Show) {
                    // 需要更新  true 强制更新  false  静态更新     reject 退出应用
                    // if (RequestAppconfig.isMust) {
                    // const title = '版本更新', content = '最新版本号: ' + RequestAppconfig.max_version, confirm = "更新";
                    // Modal(title, content, confirm).then(res => {
                    resolve(UP_Show)
                    // }).catch(err => {
                    //     reject()
                    // })
                } else {
                    resolve(false)
                }
            }).catch((err: any) => {

            })
        })
    })
}

// 应用退出
const App_exit = (system: any) => {
    if (system == 'ios') {
        plus.ios.importClass('UIApplication').sharedApplication().performSelector('exit');
    }
    if (system == 'android') {
        plus.runtime.quit();
    }
}
// 强制更新
const Forced_Updating = (system: any) => {
    // ios去应用商店下载
    if (system == 'ios') {
        plus.runtime.openURL(ios_URL)
    }
    // 安卓需要到网页上下载
    if (system == 'android') {
        plus.runtime.openURL(RequestAppconfig.android_href)
    }
}

// 静默更新
const Silent_Updating = () => {
    uni.downloadFile({
        url: RequestAppconfig.android_hot, //wgt包下载地址
        timeout: 1000 * 30, // 30秒超时时间
        success: ({ tempFilePath, statusCode }) => {
            if (statusCode == 200) {
                // Toast('下载成功')
                let config = {
                    force: true
                }
                plus.runtime.install(tempFilePath, config, res => {
                    // Toast('安装成功，正在重启应用')
                    plus.runtime.restart()
                }, err => {
                    // Toast('安装失败，请稍后重试')
                })
            } else {
                // Toast('下载失败，请稍后重试')
            }
        },
        fail: (error) => {
            // 失败就执行一次强制更新
            const system = uni.getSystemInfoSync()
            Forced_Updating(system.osName)
        }
    })
}

export default APP_UPdata
// #endif

